package com.shujia.mysql;

import java.sql.*;

public class Demo1MySQLJDBC {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {

        System.out.println(args[0]);
        String age = args[0]; // 通过参数传入

        // 1、加载驱动
        Class.forName("com.mysql.jdbc.Driver");

        // 2、建立连接
        /**
         * jdbc url ===>  jdbc:mysql://master:3306/db1?useSSL=false
         */
        Connection conn = DriverManager.getConnection("jdbc:mysql://master:3306/db1?useSSL=false", "root", "123456");

        // 3、创建statement
        Statement st = conn.createStatement();
//
//
//        //        st.executeQuery(); // 执行DQL
//        //        st.execute(); // 执行DDL、DCL
//        //        st.executeUpdate(); // DML
//
//        // 查询 年龄 = 23 的学生
//        // 如果用户输入 "22 or 1=1"，那么会造成数据泄露问题
//        // 使用Statement容易出现SQL注入问题

//        ResultSet rs = st.executeQuery("select * from student where age = " + age);


        // 使用 prepareStatement 避免SQL注入问题
        /**
         * prepareStatement 可以通过方法设置参数，而不是通过字符串拼接的方式传入参数
         */
        PreparedStatement preSt = conn.prepareStatement("select * from student where age = ? and clazz = ?");
        /**
         * 参数的顺序 从1开始计数
         */
        preSt.setInt(1, Integer.parseInt(age));
        preSt.setString(2,"文科一班");

        ResultSet rs = preSt.executeQuery();

        // 4、如果有数据返回则可以遍历ResultSet
        while (rs.next()) {
            // rs 相当于 依次执行 返回的每一条数据
            int id = rs.getInt("id");
            String name = rs.getString("name");
            int stu_age = rs.getInt("age");
            String gender = rs.getString("gender");
            String clazz = rs.getString("clazz");
            System.out.println(id + "," + name + "," + stu_age + "," + gender + "," + clazz);
        }

        // 5、关闭连接
        conn.close();

    }
}
